#pragma once

#include "DLDataRange.hpp"
#include "DLUnion.hpp"

namespace terms {
	namespace dl {
		template <typename L=std::string, typename I=std::string, typename C=std::string, typename R=std::string>
		class DLDataUnion
			: public virtual DLUnion<L, I, C, R, DLDataRange<L, I, C, R>>
		{
		public:
			using DLUnion<L, I, C, R, DLDataRange<L, I, C, R>>::DLUnion;

		public:
			virtual std::string
			to_string() const
			{
				std::string str = "(OR ";
				str.append(DLUnion<DLTerm<L, I, C, R>, DLDataRange<L, I, C, R>>::to_string(" "));
				str.append(")");
				return str;
			}

		public:
			virtual DLTermOrder
			get_type_order() const
			{
				return DLTermOrder::DATA_UNION;
			}
		};
	}
}

